/*
 * Copyright   2000   The Regents of the University of California
 * All Rights Reserved
 * 
 * Permission to use, copy, modify and distribute any part of Simgrid/SG
 * for educational, research and non-profit purposes, without fee, and
 * without a written agreement is hereby granted, provided that the above
 * copyright notice, this paragraph and the following three paragraphs
 * appear in all copies.
 * 
 * Those desiring to incorporate this Simgrid/SG into commercial
 * products or use for commercial purposes should contact the Technology
 * Transfer & Intellectual Property Services, University of California,
 * San Diego, 9500 Gilman Drive, Mail Code 0910, La Jolla, CA 92093-0910,
 * Ph: (858) 534-5815, FAX: (858) 534-7345, E-MAIL:invent@ucsd.edu.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
 * INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS Simgrid/SG,
 * EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.  
 * 
 * THE Simgrid/SG PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND THE
 * UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
 * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.  THE UNIVERSITY OF
 * CALIFORNIA MAKES NO REPRESENTATIONS AND EXTENDS NO WARRANTIES OF ANY
 * KIND, EITHER IMPLIED OR EXPRESS, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 * PURPOSE, OR THAT THE USE OF THE Simgrid/SG WILL NOT INFRINGE ANY
 * PATENT, TRADEMARK OR OTHER RIGHTS.
 */

#ifndef SG_GLOBAL_H
#define SG_GLOBAL_H

typedef struct {

  /* Global virtual time */
  long double clock;

  /* Resource lists */
  SG_ResourceList resources;

  /* Local link */
  SG_Resource infinitely_fast_link;

  /* TCP bandwidth sharing or not */
  SG_global_sharing_policy_t global_sharing_policy;

  /* ANY_TASK, ALL_TASKS */
  SG_Task any_task;
  SG_Task all_tasks;

  /* Task lists */
  SG_TaskList tasks_not_scheduled;
  SG_TaskList tasks_scheduled;
  SG_TaskList tasks_ready;
  SG_TaskList tasks_running;
  SG_TaskList tasks_failed;
  SG_TaskList tasks_done;

  /* Trace "database" */
  SG_TraceList traces;

  /* bogus name */
  char *no_name;

  /* epsilon */
  long double epsilon;
  int simulate_warning; /* set to 0 to supress SG_simulate warnings when 
			   used with MSG */
} SG_Global;

extern SG_Global sg_global;

#define SG_INFINITELY_FAST_LINK (sg_global.infinitely_fast_link)

#define SG_ANY_TASK  (sg_global.any_task)
#define SG_ALL_TASKS (sg_global.all_tasks)

#define SG_NO_NAME (sg_global.no_name)

#define DEFAULT_EPSILON 0.000000001
#define EPSILON (sg_global.epsilon)

#endif				/* SG_TYPES_H */
